iT邦幫忙

2023 iThome 鐵人賽

DAY 4
3

常用的 HTML 元素

提醒

  1. W3C 建議所有 HTML 標籤名稱都是小寫。
  2. 在沒有引入 CSS 樣式前,各元素已具有瀏覽器預設樣式(User Agent Stylesheet),可能是間距或顏色等。
  3. 預設樣式皆可被自定義的 CSS 覆蓋。


Fig. 1. 標題標籤的正確使用法,Semrush Blog,https://www.semrush.com/blog/semantic-html5-guide/

  • 標題 <h1>、<h2>、<h3>、<h4>、<h5>、<h6>
    • 可隨開發者需求自由決定樣式(顏色、大小、字重等等)
    • 由最重要的主要標題 <h1> 到最不重要的 <h6>。
    • 千萬不要隨意使用標題來讓文字變大,會影響 SEO。
    • 預設 display:block
    • 備註:
      • 1:一個頁面的主標題 <h1> 只有一個,但 <h2>~<h6> 可以有很多個。
      • 2:若使用到六層標題,建議分成多個頁面處理,以免頁面顯得笨重。
      • 3:搜尋引擎會把標題當作重要關鍵字,進而影響搜尋結果與 SEO。
  • 段落 <p>
    • 通常用來放一個句子或段落。
    • 預設 display:block
    • 備註:
      • 1:空格無法影響排版。若想保留換行或空格的效果,請使用 <pre></pre>
      • 2:瀏覽器預設樣式會自動為段落增加間距(margin 或 padding)
      • 3:盡量不要使用 <br> 換行,那會讓你的 HTML 結構變得更複雜,且不易維護。


Fig. 2. <p> 示意

  • 連結 <a>
    • 預設 display:inline
    • 屬性
      • href:連結的地址

        • 最重要的屬性,連結可以指向圖片、網址或任何 HTML 元素。
        • 可以指向電話或 email
        • 若是以圖片作為連結,把 <img> 放在 <a></a> 兩個標籤間即可(即範例的 GOOGLE 位置)
        • 連結可以是絕對路徑或相對路徑
      • rel:連結的目標與這份 HTML 的關係,rel 在 a,area,link 上生效。

        • external:連結到外部(網站)
        • icon:此網頁的標題小圖示
        • stylesheet:網頁的樣式
      • target:目標

        • _self:預設值。點擊時在當前視窗開啟連結。
        • _blank:在新視窗開啟連結
        • _parent:在上一層的父層中打開
        • _top:在最上層的父視窗中打開
    • 備註:
      1. <a> 連結本身帶有預設的 CSS,可以自行更改。
      2. 關於絕對路徑與相對路徑,請見補充


Fig. 3. <a> 示意

  • 圖片 <img>
    • 預設 display:block
    • 屬性
      • src

        • 放置圖片連結位址,可以是相對位址或絕對位址。
      • alt

        • 圖片無法顯示時的替代文字。
        • 提高 A11y 用。例如對視覺障礙者來說,他們無法直接閱讀畫面,需要靠像輔具將畫面唸 出來。此時輔具會將 alt 的內容唸出來。
<img src="/xxx.jpg" alt="你好我是一張圖片O_<" />
  • 區塊元素 <div> 與行內元素 <span>
    • 共通點

      • 本身不具任何語意
      • 在沒有其他合適的語意元素時,才建議使用。
      • 可以加入各種屬性如 id、class 等,方便排版或操控。
    • <div>

      • 是容器元素,裡面可以放各式元素。
      • 預設 display 為 block
    • <span>

      • 內容通常是文字
      • 預設 display 為 inline
  • 清單
    • 有序列表(ordered lists),<ol>

      • 通常會渲染成帶編號的列表
    • 無序列表(unordered lists),<ul>

      • 通常渲染結果為項目符號的列表
    • 清單項目 <li>

      • 必須被包覆在 <ol> 或 <ul> 內
    • 其他

      • 可對父元素 <ol> 或 <ul> 設定 CSS 屬性 list-style-type 來改變 <li> 們的樣式。預設樣式為實心圓點 disc。


Fig. 4. 有序與無序列表示意

  • 表格 <table></table>
    • <table> 是這份表單的容器元素

    • 表頭 <th></th>

      • 定義表格中每個 col(欄位)的標題
    • 內容

      • 由橫列 <tr>(table row)跟直行 <td>(table data)組成
    • 合併儲存格

      • <colspan>:水平合併
      • <rowspan>:垂直合併
    • 選用:

      • <caption></caption>:表格標題、表格說明,概念似「圖說」。可以用 CSS 調整與表格的相對位置如 caption-side: bottom

      • <thead></thead>、<tbody></tbody>、<tfoot></tfoot>:標示表格的上層、中央主體、底部。

      • <colgroup span="number"></colgroup>:替每個直欄(column)分組,span 的數值代表橫跨幾個 col。若有 <caption> 標籤則放在其後,沒有的話則放在其他表格標籤前。


Fig. 5. table 示意

table 示意 HTML & CSS

<table>
  <caption>Table. 1. 名字與年紀</caption>
  <colgroup>
    <col span="2" class="purple">
    <col span="1" class="green">
  </colgroup>
  <thead>
    <tr>
      <th colspan="2">Name</th>
      <th>Age</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Jill</td>
      <td>Smith</td>
      <td>43</td>
    </tr>
    <tr>
      <td>Eve</td>
      <td>Jackson</td>
      <td>57</td>
    </tr>
    <tr>
      <td>Jane</td>
      <td rowspan="2">House</td>
      <td>60</td>
    </tr>
    <tr>
      <td>David</td>
      <td>55</td>
    </tr>
  </tbody>
</table>
table,
th,
td {
  padding: 5px;
  border: 1px solid black;
  border-collapse: collapse;
}
.purple {
  background-color: #c7c7e2;
}
.green {
  background-color: #a3d1d1;
}


Fig. 6. label 示意

  • 表單 <form> </form>
    • 點下送出鈕後,表單會往伺服器提交資訊。
    • 表單內可以有文字、輸入區域、單選 / 複選選項、提交鈕(button)等。
    • 供填寫或選擇的欄位須加上 name 與 value 屬性,表單在按下送出時才能取得對應資料。
    • 純輸入的欄位不用給 value
    • 子元素(部分)
      • <label>:欄位的名稱。
        • 可提升 A11y
        • label 最多只能有一個子元素。
        • 替 lable 加上屬性 for(例:for="phone"),可與表單元件中的 id (例:id="phone")進行關聯、增加點擊範圍
        • 把關聯欄位包在 label 內,就不用再寫 for 跟 id 這兩個屬性。(可以少打幾個字XD)
        • 但為了 a11y,for 跟 id 還是要設定QQ
      • <input>:是用途最千變萬化的 html tag。可以依需求選擇不同的 type,例如 checkbox、button、password、date、radio 等等。預設 type 為 text。
        • 屬性
          • name:代表傳送資料的名稱。讓伺服器依據 name 取出 input 的 value。
          • value:與 name 呈成對關係,送往伺服器時會是 name="value" 的形式。若 type="text",則不需設定。以 Fig. 6. 來說,若輸入 0123456789,送出表單的值為 phone="0123456789"
      • <button>:按鈕,通常用在表單或任何需要按鈕的地方。
        • 屬性:
          • name:button 的名稱,會與表單資料一起提交。

          • type:button 的類型,有幾種常見值可使用

            • submit:預設值。將表單資料提交給伺服器用。
            • reset:將所有組件重設為初始值。
            • button:沒有預設行為,可用來觸發事件。
          • value:當表單的數據被提交,這顆按鈕的 value 值也會以參數的形式一同提交。

      • 下拉式選單 <select>:
        • <select> 是下拉式選單的容器元素。
          • <option>:下拉式選單的選項
            • 屬性
              • label:表示 option 意思。預設值為 option 本身的文字內容。
              • value:為被選取後提交的值。預設值為 option 本身的文字內容。
          • <optgroup>:可以替下拉選單的選項進行分組。
            • 屬性
              • label:標示分組的名稱。
      • <fieldset></fieldset>:可以對表單內的元素進行分組的區域劃分。<fieldset> 本身具有預設 CSS 樣式。
        • <legend>:定義區域的標題。
    • <form> 的屬性 attributes
      • name:每份表單獨有的名稱;同一頁面中若有多個表單,name 不可重複。
      • action:讓瀏覽器知道按下送出鈕後,資料要送到哪裡(url)
      • method:選擇用何種 HTTP 方法提交表單
        • post:會變成封包送出;若有敏感資料或資料量較大,建議使用
        • get:送出後會顯示在網址列上;通常用在不具敏感性或較小的資料。
      • target:與 <a> 的 target 用法一樣。
<form action="/0817-form/index.html" method="get">
  <fieldset>
    <legend>個人資料</legend>
    <!-- label 的 for 跟對應內容的 id 要相同,才能配對 -->
    <div>
      <label for="name">姓名</label>
      <input type="text" id="name" name="username">
    </div>
    <div>
      <label for="country">居住縣市</label>
      <input type="text" id="country" name="residence">
    </div>
    <div>
      <label>電話號碼
        <input type="tel" name="phone" maxlength="10">
      </label>
    </div>
  </fieldset>
  <fieldset>
    <legend>喜好</legend>
    <div>
      <label>喜歡的動物
        <select name="animal">
          <optgroup label="大型動物">
            <option value="lion">獅子</option>
            <option value="cow">牛</option>
          </optgroup>
          <optgroup label="中小型動物">
            <option value="otter">獺</option>
            <option value="cat">貓咪</option>
          </optgroup>
        </select>
      </label>
    </div>
    <!-- 單選 -->
    <div>
      <label>喜歡的食物
        <input type="radio" name="food" value="banana">香蕉
        <input type="radio" name="food" value="banana">蘋果
      </label>
    </div>
    <!-- 多選 -->
    <div>
      <label>喜歡的數字
        <input type="checkbox" name="favnum" value="1">1
        <input type="checkbox" name="favnum" value="2">2
        <input type="checkbox" name="favnum" value="3">3
      </label>
    </div>
  </fieldset>
  <fieldset>
    <legend>想說的話</legend>
    <label>留言
      <textarea name="message" cols="30" rows="10"></textarea>
    </label>
  </fieldset>
  <button type="submit">送出</button>
</form>

參考資料:

  • HTML 項目列表清單,https://www.fooish.com/html/list-ul-ol-li-dl-dt-dd-tag.html
  • <ol>: The Ordered List element - HTML: HyperText Markup Language | MDN,https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol
  • <table>:表格元素 - HTML(超文本标记语言) | MDN,https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/table
  • HTML Tables,https://www.w3schools.com/html/html_tables.asp
  • HTML <table> 表格 - HTML 語法教學 Tutorial,https://www.fooish.com/html/table.html
  • 表單元素分組 <fieldset> - HTML 教學 | STEAM 教育學習網,https://steam.oxxostudio.tw/category/html/tags/fieldset.html
  • 3個要點弄懂HTML的Form表單,https://selflearningsuccess.com/html-form/
  • 如何建構 HTML 表單 - 學習該如何開發 Web | MDN,https://developer.mozilla.org/zh-TW/docs/Learn/Forms/How_to_structure_a_web_form
  • label- HTML(超文本标记语言) | MDN,https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/label
  • HTML 属性:rel - HTML(超文本标记语言) | MDN,https://developer.mozilla.org/zh-CN/docs/Web/HTML/Attributes/rel

上一篇
D3 - HTML - 語意化元素、區塊元素與行內元素
下一篇
D5 - HTML - 補充:絕對路徑與相對路徑
系列文
GPT 救救我!菜雞小海獺的前端成長之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言